var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
const mongoose = require('mongoose');
require('./lib/db') 
const queryString = require('querystring')
const GOODS = require('./lib/model/goods')
const USERS = require('./lib/model/users')
var app = express();

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));  // 设置公用的静态资源 public

// 商品模块

// 商品列表
app.get('/list', (req,res)=>{
  GOODS.find({}, (err,result)=>{
    if (!err) {
      res.json({
        code: 200,
        data: result
      })
    }else{
      res.json({
        code: 400,
        data: '失败，联系管理员'
      })
    }
  })
})
// 商品详情
app.get('/detail', (req,res)=>{
  // 获取字符下标 indexOf()
  // 截取字符串  
  // substr(index)
  // split()  将字符串分割成数组

   // /detail?id=xxxx
  let str = req.url.substr(req.url.indexOf('?')+1)  // 截取以后的字符串   id=xxx&a=b&c=d
  let obj = queryString.parse(str)  // {id:xxx,a:''}
  /**
   * let str = req.url  // /detail?id=xxxx
    let index = str.indexOf('?')+1
    str = str.substr(index)  // 截取以后的字符串   id=xxx&a=b&c=d
    let obj = queryString.parse(str)  // {id:xxx,a:''}
   * 
   */
  // /detail?id=2
  // id前端传递给后端
  // 根据id查询商品
  // 查询到商品的详情数据之后，进行数据响应
  GOODS.findById(obj.id, (err, result)=>{
    res.json({
      code: 200,
      data: result
    })
  })
})

// 用户模块

// 登录即注册
// 如果这个人已经注册过了，就是单纯的登录
// 如果这个人没有注册，直接注册，默认登录

// 1. 数据库中，如果没有这个账号，说明没有注册过，添加这个账号，表示注册且登录
// 2. 如果有这个账号，说明已经注册过，验证账户和密码 与 数据库的账户和密码 是否一致
// 3. 如果一致，登录成功,不一致，说明密码错误

app.post('/login', (req,res)=>{ 
  // 先拿到前端给后端传递的手机号和密码
  let phone = req.body.phone
  let pwd = req.body.pwd
  // 拿着手机号和数据库进行比较
  USERS.findOne({phone: phone}, (err, result)=>{
    if (!err) {
      if (result) {
        console.log('应该去登录~');
         // 数据库存在手机号
          // 就拿数据库中这个手机号的密码和传递过来的密码进行比较
          if (result.pwd === pwd) {
            res.json({
              code: 200,
              msg: '登录成功'
            })
          }else{
            res.json({
              code: 400,
              msg: '密码错误'
            })
          }
          // 如果相等
          // 登录成功
          // 如果不等
          // 密码错误
      }else{
        // 数据库不存在手机号
          // 给数据库添加这个手机号和密码，表示注册
          // 注册成功/登录成功
        new USERS({
          phone,
          pwd
        }).save(()=>{
          res.json({
            code: 200,
            msg: '注册&登录成功'
          })
        })
      }
    }
  })
})




app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;
